﻿using System;
using System.Data.SqlClient;
using Sireass.Dal;
using Csla.Data;

namespace Sireass.DalSql
{
    public class ProyectoDal : IProyectoDal
    {
        private SqlParameter accion = null;
        private string nombreProcedimiento = null;

        public ProyectoDal()
        {
            accion = new SqlParameter("@Accion", System.Data.SqlDbType.SmallInt);
            nombreProcedimiento = "spSireassCatProyecto";
        }

        public System.Data.IDataReader Fetch()
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                var cm = ctx.Connection.CreateCommand();
                cm.CommandType = System.Data.CommandType.StoredProcedure;
                cm.CommandText = nombreProcedimiento;
                cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.CONSULTAR);
                return cm.ExecuteReader();
            }
        }

        public System.Data.IDataReader Fetch(long idProyecto)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                var cm = ctx.Connection.CreateCommand();
                cm.CommandType = System.Data.CommandType.StoredProcedure;
                cm.CommandText = nombreProcedimiento;
                cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.CONSULTAR);
                cm.Parameters.AddWithValue("@nId_Proyecto", idProyecto);
                return cm.ExecuteReader();
            }
        }

        public long Insert(long idPrograma, long idUnidadResponsable, long idResponsable, string proyecto, string claveProyecto,
                           string objetivo, string meta, DateTime fechaInicioVigencia, DateTime fechaFinVigencia, bool habilitado)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                using (var cm = ctx.Connection.CreateCommand())
                {
                    cm.CommandType = System.Data.CommandType.StoredProcedure;
                    cm.CommandText = nombreProcedimiento;
                    cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.INSERTAR);
					cm.Parameters.AddWithValue("@nId_Programa", idPrograma);
                    cm.Parameters.AddWithValue("@nId_UnidadResponsable", idUnidadResponsable);
                    cm.Parameters.AddWithValue("@nId_Persona_Responsable", idResponsable);
                    cm.Parameters.AddWithValue("@cProyecto", proyecto);
                    cm.Parameters.AddWithValue("@cClave_Proyecto", claveProyecto);
                    cm.Parameters.AddWithValue("@cObjetivo", objetivo);
                    cm.Parameters.AddWithValue("@cMeta", meta);
                    cm.Parameters.AddWithValue("@dFecha_Inicio_Vigencia", fechaInicioVigencia);
                    cm.Parameters.AddWithValue("@dFecha_Fin_Vigencia", fechaFinVigencia);
                    cm.Parameters.AddWithValue("@bHabilitado", habilitado);
                    SqlParameter paramIdProyecto = new SqlParameter("@nId_Proyecto", System.Data.SqlDbType.TinyInt);
                    paramIdProyecto.Direction = System.Data.ParameterDirection.Output;
                    cm.Parameters.Add(paramIdProyecto);
                    cm.ExecuteNonQuery();
                    return Convert.ToInt64(paramIdProyecto.Value);
                }
            }
        }

        public void Update(long idProyecto, long idPrograma, long idUnidadResponsable, long idResponsable, string proyecto, string claveProyecto,
            string objetivo, string meta, DateTime fechaInicioVigencia, DateTime fechaFinVigencia, bool habilitado)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                using (var cm = ctx.Connection.CreateCommand())
                {
                    cm.CommandType = System.Data.CommandType.StoredProcedure;
                    cm.CommandText = nombreProcedimiento;
                    cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.ACTUALIZAR);
                    cm.Parameters.AddWithValue("@nId_Proyecto", idProyecto);
					cm.Parameters.AddWithValue("@nId_Programa", idPrograma);
                    cm.Parameters.AddWithValue("@nId_UnidadResponsable", idUnidadResponsable);
                    cm.Parameters.AddWithValue("@nId_Persona_Responsable", idResponsable);
                    cm.Parameters.AddWithValue("@cProyecto", proyecto);
                    cm.Parameters.AddWithValue("@cClave_Proyecto", claveProyecto);
                    cm.Parameters.AddWithValue("@cObjetivo", objetivo);
                    cm.Parameters.AddWithValue("@cMeta", meta);
                    cm.Parameters.AddWithValue("@dFecha_Inicio_Vigencia", fechaInicioVigencia);
                    cm.Parameters.AddWithValue("@dFecha_Fin_Vigencia", fechaFinVigencia);
                    cm.Parameters.AddWithValue("@bHabilitado", habilitado);

                    var rowsAffected = cm.ExecuteNonQuery();
                    if (rowsAffected == 0)
                        throw new DataNotFoundException("ProyectoUpdate");
                }
            }
        }

        public void Delete(long idProyecto)
        {
            using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
            {
                using (var cm = ctx.Connection.CreateCommand())
                {
                    cm.CommandType = System.Data.CommandType.StoredProcedure;
                    cm.CommandText = nombreProcedimiento;
                    cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.ELIMINAR);
                    cm.Parameters.AddWithValue("@nId_Proyecto", idProyecto);
                    var rowsAffected = cm.ExecuteNonQuery();
                    if (rowsAffected == 0)
                        throw new DataNotFoundException("ProyectoDelete");
                }
            }
        }

    }
}
